package com.mobile_fault_detector.controller;

import com.mobile_fault_detector.entity.DialogSession;
import com.mobile_fault_detector.service.IDialogSessionService;
import com.mobile_fault_detector.utils.Result;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;

/**
 * 对话会话控制器
 */
@Slf4j
@RestController
@RequestMapping("/session")
@RequiredArgsConstructor
public class DialogSessionController {

    private final IDialogSessionService IDialogSessionService;

    /**
     * 创建会话
     * @param dialogSession 会话信息
     * @return 创建成功的会话信息
     */
    @PostMapping("/create")
    public Result createSession(@RequestBody DialogSession dialogSession) {
        try {
            // 参数验证
            if (dialogSession == null) {
                return Result.fail("会话信息不能为空");
            }
            if (dialogSession.getUserId() == null) {
                return Result.fail("用户ID不能为空");
            }

            log.info("创建会话: {}", dialogSession);
            return Result.ok(IDialogSessionService.createSession(dialogSession));
        } catch (Exception e) {
            log.error("创建会话失败，会话信息: {}, 异常信息: {}", dialogSession, e.getMessage(), e);
            String error = String.format("创建会话失败，时间：%s", LocalDateTime.now());
            return Result.fail(error);
        }
    }

    /**
     * 根据会话ID查询会话信息
     * @param sessionId 会话ID
     * @return 会话信息
     */
    @GetMapping("/get/{sessionId}")
    public Result getSessionById(@PathVariable Long sessionId) {
        try {
            // 参数验证
            if (sessionId == null || sessionId <= 0) {
                return Result.fail("会话ID不能为空且必须大于0");
            }

            log.info("查询会话信息，会话ID: {}", sessionId);
            DialogSession session = IDialogSessionService.getSessionById(sessionId);
            if (session == null) {
                return Result.fail("会话不存在");
            }
            return Result.ok(session);
        } catch (Exception e) {
            log.error("查询会话信息失败，会话ID: {}, 异常信息: {}", sessionId, e.getMessage(), e);
            String error = String.format("查询会话信息失败，会话ID：%d，时间：%s", sessionId, LocalDateTime.now());
            return Result.fail(error);
        }
    }

    /**
     * 根据用户ID查询会话列表
     * @param userId 用户ID
     * @return 会话列表
     */
    @GetMapping("/user/{userId}")
    public Result getSessionsByUserId(@PathVariable Long userId) {
        try {
            // 参数验证
            if (userId == null || userId <= 0) {
                return Result.fail("用户ID不能为空且必须大于0");
            }

            log.info("查询用户会话列表，用户ID: {}", userId);
            return Result.ok(IDialogSessionService.getSessionsByUserId(userId));
        } catch (Exception e) {
            log.error("查询用户会话列表失败，用户ID: {}, 异常信息: {}", userId, e.getMessage(), e);
            String error = String.format("查询用户会话列表失败，用户ID：%d，时间：%s", userId, LocalDateTime.now());
            return Result.fail(error);
        }
    }

    /**
     * 结束会话
     * @param sessionId 会话ID
     * @return 结束后的会话信息
     */
    @PutMapping("/end/{sessionId}")
    public Result endSession(@PathVariable Long sessionId) {
        try {
            // 参数验证
            if (sessionId == null || sessionId <= 0) {
                return Result.fail("会话ID不能为空且必须大于0");
            }

            log.info("结束会话，会话ID: {}", sessionId);
            DialogSession session = IDialogSessionService.endSession(sessionId);
            if (session == null) {
                return Result.fail("会话不存在");
            }
            return Result.ok(session);
        } catch (Exception e) {
            log.error("结束会话失败，会话ID: {}, 异常信息: {}", sessionId, e.getMessage(), e);
            String error = String.format("结束会话失败，会话ID：%d，时间：%s", sessionId, LocalDateTime.now());
            return Result.fail(error);
        }
    }
}